在 Kubernetes (K8s) 中,Service 可以讓 Pod 之間互相溝通,但當流量要進入整個 Cluster 時,我們需要更高階的控制。Ingress 便是專門用來管理 外部流量進入 K8s 內部服務的「入口控制器」。
本文會從實務例子開始,逐步解釋 Ingress 的用途、配置方式,以及它有哪些限制。
情境案例:
Ingress 則是透過一個控制器 (Ingress Controller,如 NGINX、Traefik、HAProxy) 來統一管理外部流量。
只要設定規則,就能把同一個 Domain 的不同 Path/Host 分流到不同 Service。
一個簡單的 Ingress Manifest:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: myapp.com
    http:
      paths:
      - path: /frontend
        pathType: Prefix
        backend:
          service:
            name: frontend-svc
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-svc
            port:
              number: 80
這樣設定後:
myapp.com/frontend → 轉發到 frontend-svcmyapp.com/api → 轉發到 api-svc雖然 Ingress 很方便,但隨著服務變多,問題也逐漸浮現:
規格太簡單
強烈依賴 Controller 實作
缺乏進階流量治理
缺乏一致性 API
Ingress 幫 Kubernetes 解決了「如何讓外部流量進來」的基本問題,但它的設計過於簡單,導致不同實作之間差異巨大,缺乏一致性。
下一篇,我會介紹 Gateway API,它是 CNCF 社群提出來的新一代標準,目標就是補足 Ingress 的不足。